package Movement;

import java.util.ArrayList;
import java.util.Collection;

import lejos.nxt.LCD;
import lejos.robotics.navigation.WayPoint;

public class NERoom {
	
	public static NERoom getCenterRoom() {
		WayPoint w1 = new WayPoint(0,0);
		ArrayList<WayPoint> path = new ArrayList<WayPoint>();
		path.add(w1);
		path.add(w1);
		NERoom centerRoom = NERoom.newWithPath(path);
		
		return centerRoom;
		
	}
	
	/**
	 * Chemin allant du centre à la pièce
	 */
	protected ArrayList<WayPoint> path = new ArrayList<WayPoint>();
	protected int name;

	/**
	 * Constructeur statique
	 * @param path1
	 * @return NERoom
	 */
	public static NERoom newWithPath(ArrayList<WayPoint> path) {
		NERoom room = new NERoom();
		room.setPath(path);
		
		return room;
	}

	/**
	 * Ajoute un WayPoint au chemin allant du centre à la pièce
	 * 
	 * @param point
	 * @return NEDestination
	 */
	public NERoom addWayPoint(WayPoint point) {
		this.path.add(point);
		
		return this;
		
	}
	
	
	
	/**
	 * Set le path de la pièce
	 * 
	 * @param path1
	 */
	public void setPath(ArrayList<WayPoint> path) {
		this.path = path;
		
	}

	/**
	 * Retourne le chemin du centre vers la pièce
	 * 
	 * @return ArrayList<WayPoint>
	 */
	public ArrayList<WayPoint> getPath() {
		ArrayList<WayPoint> pathclone = new ArrayList<WayPoint>();
		for (int i=0; i<this.path.size();i++)
		{
			pathclone.add(this.path.get(i));
		}
		return pathclone;
		
	}

	/**
	 * Retourne le chemin depuis la position de la pièce vers le centre
	 * 
	 * @return ArrayList<WayPoint>
	 */
	public ArrayList<WayPoint> getPathToCenter() {
		ArrayList<WayPoint> pathToCenter = new ArrayList<WayPoint>();
		
		for (int i=path.size()-1; i>=0; i--) {
			pathToCenter.add(path.get(i));
			
		}
		
		return pathToCenter;
				
	}
	
	/**
	 * Retourne vrai si la position de la pièce est égale à la destination testée
	 * 
	 * @param destination
	 * @return boolean
	 */
	public boolean equals(NERoom destination) {
		return this.getPosition().getX() == destination.getPosition().getX() && this.getPosition().getY() == destination.getPosition().getY();	
		
	}

	/**
	 * Retourne la position de la pièce (le dernier WayPoint du chemin pour l'atteindre)
	 * 
	 * @return WayPoint
	 */
	public WayPoint getPosition() {
		return this.getPath().get(this.getPath().size()-1);
				
	}

	public void setName(int size) {
		this.name = size;
		
	}
	public int getName()
	{
		return this.name;
	}


	
	
	

}
